home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 8
/
Aminet 8 (1995)(GTI - Schatztruhe)[!][Oct 1995].iso
/
Aminet
/
util
/
arc
/
MDCV1_43.lha
/
MDC.Doc
< prev
next >
Wrap
Text File
|
1995-09-03
|
25KB
|
703 lines
---------------------------------------------------------------------------
Marc's Disk Cruncher V1.43 User Documentation
Copyright © 1994, 1995 by Marko Pozarnik
---------------------------------------------------------------------------
1. Preface
---------------------------------------------------------------------------
I had Amiga 1200, without a turbo board or extra memory, for a long time.
Then I got access to InterNet and so to AmiNet and other Amiga sites. Most
of the files there were packed with DMS and that's the main reason why I
wrote MDC. I had and have to use DMS, like most of you and we all know DMS
would need some improvements, which noone has done. Even though there were
many people who did some work on it since the version 1.11, but has DMS
changed signifficantly since then? The answer is no. There are some bugs
and other things which could be done better, but where is the author to
support the users? I don't even know his/her name.
I know my program is still not competitive with DMS, but I know the
reasons and I think the reasons aren't that big, that they couldn't be
solved. But, why should I write about them? Try MDC and tell me what you
like and what not. You would really help me with it.
I would suggest that you read the whole document. Maybe you will find
some useful information.
At the moment Kickstart 2.04 is required for the program but I guess
that's O.K. There are only few people, who are still using kickstarts
older than the version 2.04.
xpkmaster.library and xpk????.library should be installed on your
computer. Look for xpk25usr.lha in util/pack directory on AmiNet.
---------------------------------------------------------------------------
2. Disclaimer
---------------------------------------------------------------------------
This is unregistered and uncripled version of the program.
Distribution may be freely distributed as long as no more than a nominal
fee is charged to cover time and copying costs.
Commercial usage is permitted with this sentence.
Files in this distribution are copyright © 1994, 1995 by Marko Pozarnik.
Everything in this distribution must be kept together, in original and
unmodified form.
The distribution contains following files:
MDC.000 (10432 bytes)
MDC.020 (10252 bytes)
MDC.AmiNetReadMe ( 1581 bytes)
MDC.Doc (25464 bytes)
MDC.History (12930 bytes)
MDC.ReadMe ( 2024 bytes)
The above is generally known as shareware.
You may not copy and/or distribute this program without the accompanying
documentation unless you get permission from the author to do so.
You may not disassemble, decompile, re-source or otherwise reverse
engineer the program. If you wish to incorporate parts of this program
into other programs, write to the author to ask for permission.
This product is sold "as is" without representation or warranty of any
kind, either expressed or implied. The user assumes all risks and
responsibilities related to its use.
---------------------------------------------------------------------------
3. Contents
---------------------------------------------------------------------------
1. Preface
2. Disclaimer
3. Contents
4. Author's contact addresses
5. Installation
6. Usage
7. MDC compared to DMS
8. Benchmarks
9. How to register?
10. To do
11. Special information about making the program
---------------------------------------------------------------------------
4. Author's contact addresses
---------------------------------------------------------------------------
Please contact me if you have any comments or suggestions:
E-Mail: marko.pozarnik@uni-mb.si
Mail: Marko Pozarnik
Prusnikova 4
62000 Maribor
Slovenia
Phone: +368 (0) 62 38 303 (From 10 PM to 2 AM CET)
IRC: SSMP
---------------------------------------------------------------------------
5. Installation
---------------------------------------------------------------------------
You should have Xpk package installed (it's on AmiNet in util/pack
directory named xpk25usr.lha or later), then the only thing to do is to
copy the version of MDC that works with your processor:
Copy MDC.0x0 C:MDC
Where x is one of 0 (for 68000+) or 2 (for 68020+)
That's it. If you want to test it you don't have to read the whole doc
but please be aware, that MDC doesn't tell you to insert the disk to crunch
from or decrunch to. If you want this you should use argument WFK.
---------------------------------------------------------------------------
6. Usage
---------------------------------------------------------------------------
MDC From/A,To/K,Q=Quiet/S,L=Low/K/N,H=High/K/N,M=Mode/K/N,P=Packer/K,
Test/S,Info/S,S=Step/K/N,Pri=Priority/K/N,Split/S,Repack/S,
WFK=WaitForKey/S,F=Force/S,Extract/S,Join/S,Beep/S,Verify/S,Corrupt/S,
Prefs/K
Some examples:
1. MDC DF0: To RAM:Test L 0 H 0 M 100 P Nuke
2. MDC DF0: To RAM:Test.MDC Low 0 High 0 Packer Nuke Mode 100
3. MDC RAM:#? Test
4. MDC RAM:Test.MDC To DF1: Quiet
Examples 1 and 2 are the same. Both are packing track 0 of disk in DF0:
to file RAM:Test.MDC with packer Nuke and mode 100.
Example 3 tests ll rchives in RAM: if they are corrupt or not.
Example 4 decrunches archive RAM:Test.MDC to DF1: Nothing is printed to
the output.
From/A - It can be file or a mounted device. It can be file only if To/K
is a mounted device or one of following options is used: Test/S, Info/S,
Split/S, Repack/S, Join/s. And it can be a mounted device if To/K is a
file and none of before written options is used. If this argument is a
mounted device, MDC will pack to To/K. .MDC will be added automatically.
If this argument is file, MDC will decrunch from From/A to To/K. From/A
can be pattern too. In this case it tests or gives information or
decrunches all matching files.
To/A - See the context at From/A. It can be file if From/A is a mounted
device.
Q=Quiet/S - This argument causes MDC not to print anything to the output.
The only things printed to the output are errors. Options Info/S and
Test/S disable this option.
L=Low/K/N - It can be a number between low cylinder and high cylinder of
the mounted device. It stands for the low track to be crunched. It has no
affection on decrunching by now.
H=High/K/N - It can be a number between low cylinder and high cylinder
and has to be greater or equal than L=Low/K/N. If only one of H=High/K/N
or L=Low/K/N is given, MDC uses the default value for the other. It has no
affection on decrunching by now, too.
M=Mode/K - It can be a number between 0 and 100. It represents pack
mode. It is 79 by default. It has no affection on decrunching.
P=Packer/K - It can be a packer of the Xpk package except IDEA and FEAL.
It represents packer method. It is FAST by deafault. It has no affection
on decrunching.
Test/S - It tests the archive. If there is only one error it stops and
reports it. If there is everything O.K. it prints that the file is O.K.
Info/S - Displays a short information about the archive.
S=Step/K/N - It can be a number which divides (H=High/K/N - L=Low/K/N +
1) without rest and it means that there will be S=Step/K/N tracks packed
together and not only one by one.
Pri=Priority/K/N - With this argument you can set the priority of MDC's
process to a value you wish, without having to set it with ChangeTaskPri
command or similar. It causes some speed improvements.
Split/K/N - It causes that the archive will be splited in Split/K/N
pieces. It is not implemented yet.
Repack/S - The same as extract, only that Packer and Mode have affection
to it and it repacks the archive to new one and not only extracts. This is
not implemented yet, too. It causes guru.
WFK=WaitForKey/S - It is for those, who want that the operations start
after pressing a key. If you do not use this argument it will start it's
work directly after starting MDC.
F=Force/S - It causes that MDC overwrites existing archive, if it has the
same name as given in To/K. Without using this option MDC stops with an
error message.
Extract/S - it extracts some packed tracks from the archive. From/A is
the name of the archive, To/K is the name of the new, extracted archive and
L=Low/K/N and H=High/K/N are the first and the last number of the tracks to
extract. This function is not implemented yet.
Join/S - It joins extracted archives. It doesn't matter if there are
some tracks not available. It joins them and MDC decrunches them. The
tracks, which are not available stay the same as they were before. This
function is not implemented yet.
Beep/S - It causes the program to beep after finishing its job, since
there are some people who watch TV or do some other things during the
operations and want to know if the processing is finished without to have a
look to the monitor or drive's LEDs. It is not implemented yet.
Verify/S - I think it would be useless, but there are people who want to
be sure. The only thing what it does more than without it, is, when it
reads from a disk, it is reading twice to different memory locations and
comparing them. It is not implemented yet.
Corrupt/S - It decrunches corrupted archives as best as possible. It
decrunches files which were packed from track 0 to 39 in one archive and
packed from track 40 to 79 (for example) to the other archive and then
joined with AmigaOS join or similar command. But I think the last
possibility won't have much sense after implementing the Join option. This
option is not implemented yet, too.
Prefs/K - it has an file, with arguments, which contain the settings for
the program. It is not implemented yet.
---------------------------------------------------------------------------
7. MDC compared to DMS or: Why should somebody use MDC rather than DMS?
---------------------------------------------------------------------------
-*- First of all MDC is still not finished it's not the last 1.* version
you see. There is a lot of work to do before ending the 1.* series.
-*- MDC has some crunchers which are faster than DMS's.
-*- MDC has some crunchers which are equal efficient as DMS's.
-*- It's bad that both together aren't reality yet. Let's wait for LZX
xpk.library.
-*- MDC uses more different packers than DMS. There are 22 packers
supported by Xpk at the moment and only 4 by DMS, where BEST, HEAVY1 and
HEAVY2 use too much time and memory for the compression. Especially on
slower machines.
-*- MDC has a developer who supports users.
-*- MDC is only 10352 bytes long.
-*- MDC can crunch nearby any mounted device.
-*- MDC supports wildcards and it doesn't stop to test files if there is
one matching the pattern which is corrupted like DMS does.
-*- MDC itself uses only 17 kB by itself and two times the size of step
multiplied with the tracksize. DMS uses much more (it has all pack methods
implemented) (about 600kB). MDC With the packer, which uses at least
memory, uses 38312 bytes with 20% compression ratio and MDC with the
packer, which uses the most of memory, uses 343648 bytes with 32%
compression ratio.
-*- MDC decrunches with noverify but it detects errors on disks anyway.
DMS reports less errors than MDC does without verify implemented. You can
check this out by yourself.
---------------------------------------------------------------------------
8. Benchmarks
---------------------------------------------------------------------------
Not so good compression with MDC acording to DMS is caused by not
identifying empty tracks/blocks by MDC. Probably it would be better to
make this table after implementing it.
In tests were used MDC V1.42 for 68020+ processors registered and DMS
V1.11 Evaluation Copy, DMS V2.04 (Illegal version; V2.10 has more bugs (I
guess it was modified by an other dirty programer)), PackDev V1.5, PackDisk
V1.1, XMash V1.2.
Following disks were crunched for test: Workbench 3.0, Dice C 3.0 Disk
1, Cadaver Disk 1 and an empty disk. Dice C 3.0 Disk 1 contains some compressed files and
the Cadaver Disk 1 is not a DOS disk.
I tested only those modes which are interesting. Workbench 3.0 disk is
crunched with the most modes available. I think that is enough to see that
not used modes at crunching other disks aren't good enough.
The first number after pack method (FAST, NUKE,...) means the pack mode,
the second the step. If there is only name.100, it means that there are no
other pack modes.
CR is compression ration in %. CT is crunching time, DCT is decrunching
time.
I tested memory usage in V1.9, but it's nearby the same in V1.42, so I
haven't made the tests again. Try:
MDC DF0: To RAM:Test Packer Shri Mode 100 Step 80
(MDC DF0: To RAM:Test P Shri M 100 S 80)
and then you can say you have a lot or at least enough memory (>3MB).
At the decompression with DMS it's important to know that its
decompression to the disk is with verify, but its verify is not better than
MDC's which is simplier and detects the same errors as DMS's.
DMS V2.20 registered crashed once (before starting the 2nd test with
DMS), when I wanted to pack with CMode HEAVY1 after packing with CMode None
or vice versa.
XMashV1.2 Crashed once, too. It was the first I used it and I used the
GUI interface. I set the Packer to Shri, Device to DF0:, I didn't select
the text files, CylInt to 10 and then it crunched a while and then at the
end of crunching to RAM: it crashed. I had to make the test again, but I
did it with the Shell version of it.
=============
Workbench 3.0
=============
Pckr PM Mde Sp Size CR CT
DMS V2.04 BEST 385728 58 1:02
DMS V2.04 HEAVY1 393606 57 1:00
DMS V2.04 HEAVY2 385728 58 1:01
DMS V2.04 NONE 902776 0 0:43
DMS V1.11 BEST 385728 58 0:41
DMS V1.11 HEAVY1 393606 57 0:40
DMS V1.11 HEAVY2 385728 58 0:41
DMS V1.11 NONE 902776 0 0:43
MDC V1.42 BLZW.14 656752 28 0:44
MDC V1.42 BLZW.28 602692 34 0:44
MDC V1.42 BLZW.42 583664 36 0:45
MDC V1.42 BLZW.57 572736 37 0:45
MDC V1.42 BLZW.71 568516 37 0:43
MDC V1.42 BLZW.85 568516 37 0:44
MDC V1.42 BLZW.100 568516 37 0:44
MDC V1.42 BLZW.100.5 545764 40 0:43
MDC V1.42 BLZW.100.10 536960 41 0:43
MDC V1.42 BLZW.100.20 537148 41 0:43
MDC V1.42 BLZW.100.40 539640 41 0:42
MDC V1.42 BLZW.100.80 542508 40 0:42
MDC V1.42 CBR0.100 804284 11 0:42
MDC V1.42 CBR0.100.10 803372 11 0:41
MDC V1.42 CRM2.100 437252 52 1:27
MDC V1.42 CRM2.100.10 398360 56 1:36
MDC V1.42 CRMS.100 543180 40 1:20
MDC V1.42 DHUF.100 906256 0 0:41
MDC V1.42 DLTA.100 906256 0 0:41
MDC V1.42 FAST.79 561624 38 0:41
MDC V1.42 FAST.100 508988 44 0:53
MDC V1.42 FAST.100.10 493860 46 0:52
MDC V1.42 FEAL <-- Not usable with MDC, for now. CR = 0%. Password encyption.
MDC V1.42 GZIP.100 414188 55 1:26
MDC V1.42 GZIP.100.10 380456 58 1:41
MDC V1.42 HFMN.100 648608 29 0:44
MDC V1.42 HUFF.100 676476 25 0:50
MDC V1.42 IDEA <-- Not usable with MDC, for now. CR = 0%. Password encyption.
MDC V1.42 IMPL.100 452992 50 1:32
MDC V1.42 IMPL.100.10 419824 54 2:22
MDC V1.42 LHLB.100 432552 52 2:10
MDC V1.42 LHLB.100.10 421716 54 2:06
MDC V1.42 MASH.100 435224 52 0:54
MDC V1.42 MASH.100.10 396820 56 1:02
MDC V1.42 NONE.100 905616 0 0:41
MDC V1.42 NONE.100.10 901776 0 0:40
MDC V1.42 NUKE.100 446928 51 0:49
MDC V1.42 NUKE.100.10 428308 53 0:49
MDC V1.42 PWPK.100 457704 50 1:09
MDC V1.42 PWPK.100.10 438252 52 1:30
MDC V1.42 RAKE.100 456912 50 0:45
MDC V1.42 RAKE.100.10 416864 54 0:44
MDC V1.42 RDCN.100 537888 41 0:43
MDC V1.42 RLEN.100 793988 12 0:42
MDC V1.42 SHRI.100 403432 56 1:30
MDC V1.42 SHRI.100.10 366520 60 1:40
MDC V1.42 SMPL.100 783696 14 0:51
MDC V1.42 SQSH.100 481412 47 1:16
PackDev V1.4 FAST.79 .4 526408 42 0:41
PackDev V1.4 FAST.100.4 482688 47 0:57
PackDev V1.4 MASH.100.4 394996 57 1:07
PackDev V1.4 NUKE.100.4 424216 53 0:50
PackDev V1.4 RAKE.100.4 414736 54 0:46
PackDev V1.4 SHRI.100.6 372864 59 1:47
PackDisk V1.1 NUKE.100 447594 51 1:59
PackDisk V1.1 SHRI.100 404098 56 5:01
XMash V1.2 NUKE.100.5 427799 53 1:10
XMash V1.2 SHRI.100.5 374107 59 1:59
===========
Dice C V3.0
===========
Pckr PM Mde Sp Size CR CT
DMS V1.11 BEST 604392 33 0:41
MDC V1.42 CRM2.100.8 615076 32 1:43
MDC V1.42 FAST.79 .8 699236 23 0:41
MDC V1.42 FAST.100.8 686060 24 0:55
MDC V1.42 GZIP.100.8 600736 34 1:44
MDC V1.42 GZIP.100.40 599700 34 1:44
MDC V1.42 GZIP.100.80 599236 34 1:45
MDC V1.42 IMPL.100.8 606840 33 2:47
MDC V1.42 LHLB.100.8 616004 32 1:56
MDC V1.42 MASH.100.8 607188 33 1:00
MDC V1.42 NUKE.100.8 647756 29 0:46
MDC V1.42 PWPK.100.8 650724 28 1:19
MDC V1.42 RAKE.100.8 658392 27 0:43
MDC V1.42 SHRI.100.8 612092 33 2:19
PackDev V1.5 GZIP.100.45 599756 34 1:53
XMash V1.2 GZIP.100.5 601227 34 1:45
=============================================================
StaticRAM.Device FFS NoIcons NoInternational NoDirCache Empty
=============================================================
DMS V1.11 BEST 2280 100 0:02
MDC V1.42 GZIP.100.80 1584 100 0:08
MDC V1.42 SHRI.100.80 1120 100 0:08
PackDev V1.5 GZIP.100.45 548 100 0:00
PackDev V1.5 SHRI.100.6 548 100 0:00
XMash V1.2 <-- works only with DFx:
==============
Cadaver Disk 1
==============
DMS V1.11 BEST 625426 31 0:42
MDC V1.42 GZIP.100.40 614360 32 1:29
MDC V1.42 GZIP.100.80 613128 32 1:30
MDC V1.42 SHRI.100.8 601496 34 2:07
PackDev V1.5 GZIP.100.45 613564 32 1:38
PackDev V1.5 SHRI.100.6 603296 33 2:04
XMash V1.2 GZIP.100.5 617083 31 1:29
XMash V1.2 SHRI.100.5 603235 34 1:45
---------------------------------------------------------------------------
9. How To Register?
---------------------------------------------------------------------------
The registration costs 10 Deutsche Mark, 4 Pounds Sterling, 8 US Dollars,
10 Australian dollars, 70 Oesterreichische Schilling, 850 Slovenskih
Tolarjev or 10 Schweizerische Franken. That are all currencies which are
accepted. Any other won't be accepted and won't be sent back and you won't
become a registered user.
I think it's worth it, not now, but as though I am going to do the planed
things. It could became a better program than DMS.
You can send me the money via mail (not E-Mail :) ). All registered
users will get the newest version of MDC sent via E-Mail or on from you
sent disk. Here are the information which should be written in your mail:
Name, Address and E-mail.
---------------------------------------------------------------------------
10. To Do!
---------------------------------------------------------------------------
-*- It could display how much data it crunched per second.
-*- During processing it could display the compression ratio.
-*- Verification. It makes a simple verification but it doesn't compare
the data read from disk or written to it.
-*- It still does not decrunch corrupt archives. Please see Usage for
further explanations.
-*- It does not decrunch with affection of L=Low/K/N and H=High/K/N.
-*- Repack isn't done yet. Please see Usage for further explanations.
-*- Extract isn't done yet. Please see Usage for further explanations.
-*- Join isn't done yet. Please see Usage for further explanations.
-*- Beep isn't done yet. Not much work to do.
-*- Prefs isn't done yet. I haven't planed it yet. It's only an idea at
the moment.
-*- If the disk is full, to which a disk is crunched it reports only that
there is error but not which. Not much work to do this.
-*- Controlling of CTRL C. There is no possibility to break the program
(except reset or turning off the computer). It worked fine, but I removed
it (don't ask me why). Will be implemented in one of the next released
versions.
-*- Password encryption if it is needed. I haven't used it till now.
-*- I could modify the track header produced by Xpk. There is some data,
which is always the same. That would make MDC archives shorter (I know how
to eliminate about 11 long words per track, minimal >= 80*11*4 = 3520 bytes
shorter archive). But that would make new archives uncompatible with the
old ones. But compatibility won't take that much memory (6 LW).
-*- Adding .nfo or .diz or any other text isn't possible yet.
-*- CRC checking is not done yet. I don't have any docmumentations on it.
If you have it, I would appreciate it, if you send it to me via E-mail.
-*- When all of the above mentioned things will be done the 1.x version will
be at the end.
-*- An guide could be written instead of a doc.
-*- Version 2.x will have empty blocks/tracks checking and ignoring.
-*- Version 3.x will have intuition based user interface (GUI).
-*- Version 4.x will be written in Asm or E.
-*- Version 5.x will be written in Asm if the version 4.x will be in E.
If you think there is something that could be done in addition to the
above, tell me about it. All suggestions are welcome. All of you, who are
using MDC at the moment are "Beta testers".
---------------------------------------------------------------------------
11. Special information about making the program
---------------------------------------------------------------------------
I would like to thank following persons:
· ZPiff for his help in using Xpk libraries. I had some problems and
couldn't find the bug.
· Amigo from Binary for his information and support with manuals. He has
helped me a lot.
· Bulb from Warlock for giving me hint for more simple solution in a
routine.
Following software/programs were used for developing MDC:
· Amiga Guide V33.49
· Cygnus Ed V3.5
· Kickstart V39.106
· KingCon V1.3
· List V1.5
· Ls V1.3
· Maxon Hot Help 3
· Most V1.57
· Multi View V39.16
· SAS C V6.55
· SCE V1.0
· Scout V2.4
· ShowNeededFiles Vx.x
· Sorted List V1.1
· TxEd Vx.x
· Workbench V40.23
· XOpa V1.6
· Term V4.3
Following devices were tested with MDC:
· DiskSpare.Device V2.0 -> Can be used.
· DMS.Device V1.4 -> Can be used only for crunching (It's read-only).
· FMSDisk.Device V1.0 -> Can be used.
· MFM.Device V38.5 -> Can be used.
· RAMDisk.Device V33.1 -> Can be used.
· SCSI.Device V37.64 -> Can not be used. I disabled the use of it.
· StatRAM.Device V37.7 -> Can be used.
Following libraries were used and/or tested with MDC:
· dos.library V39.23
· exec.library V39.47
· intuition.library V39.2084
· xpkmaster.library V2.4
· xpkBLZW.library V3.0
· xpkCBR0.library V1.0
· xpkCRM2.library V1.1
· xpkCRMS.library V1.1
· xpkDHUF.library V0.58
· xpkDLTA.library V0.1
· xpkENCO.library V1.2 -> Can not be used.
· xpkFAST.library V1.06
· xpkFEAL.library V1.03 -> Can not be used.
· xpkGZIP.library V1.0
· xpkHFMN.library V1.36
· xpkHUFF.library V0.62
· xpkIDEA.library V1.99 -> Can not be used.
· xpkIMPL.library V1.0.79
· xpkLHLB.library V1.0
· xpkMASH.library V1.98
· xpkNONE.library V1.0
· xpkNUKE.library V1.1
· xpkPWPK.library V1.0
· xpkRAKE.library V1.6
· xpkRDCN.library V3.1
· xpkRLEN.library V1.2
· xpkSHRI.library V2.1 -> Is the best in compression.
· xpkSMPL.library V1.0
· xpkSQSH.library V1.10
Following hardware configuration was used for developing MDC:
· Amiga 1200,
· 3.5 inch 233 MB Quantum hard disk with 256 kBytes of cache,
· 1 external 3.5 inch floppy drive,
· 1 external 5.25 inch floppy drive,
· Blizzard 1230 III turbo board,
· 50 MHz 68030,
· 50 MHz 68882,
· 8 MB Fast RAM,
· Logitech Mouse with two buttons,
· US Robotics Sportster 14400 FAX Modem,
· Amiga 600 power suply.
Other circumstances:
· My girlfriend Jasmina
· Sky Radio
· Products of The Coca Cola Company
· Job at KBM Infond Ltd.
Following run-time library functions were used:
· AllocDosObject
· AllocMem
· Close
· CloseDevice
· CloseLibrary
· CreateExtIO
· CreatePort
· CurrentTime
· Delay
· DeleteExtIO
· DeletePort
· DoIO
· Exit
· FindTask
· FreeDosObject
· FreeMem
· GetMsg
· IoErr
· Lock
· MatchEnd
· MatchFirst
· MatchNext
· Open
· OpenDevice
· OpenLibrary
· Printf
· PrintFault
· PutMsg
· Read
· ReadArgs
· SetIoErr
· SetTaskPri
· WaitPort
· Write
· XpkPackTags
· XpkUnpackTags
44 versions were written. V1.43's source has 1104 lines and 28924 bytes
and the executable has 10252 (10432) bytes. I have to say that this
version of MDC is not optimized as it should be, because I had no time yet.
I think, that it could be at least 300 bytes shorter and little bit faster.